package com.swf.seed.algorithms.problem;

/**
 * ClassName: Fibonacc <br/>
 * Describe:
 * Fibonacci为1200年代的欧洲数学家，在他的着作中曾经提到：「若有一只免子每个月生一只小免<br/>
 * 子，一个月后小免子也开始生产。起初只有一只免子，一个月后就有两只免子，二个月后有三<br/>
 * 只免子，三个月后有五只免子（小免子投入生产）......。<br/>
 * 如果不太理解这个例子的话，举个图就知道了，注意新生的小免子需一个月成长期才会投入生<br/>
 * 产，类似的道理也可以用于植物的生长，这就是Fibonacci数列，一般习惯称之为费氏数列，例<br/>
 * 如以下：1、1、2、3、5、8、13、21、34、55、89......<br/>

 * Function: 依说明，我们可以将费氏数列定义为以下：<br/>
 * fn=fn-1+fn-2 if n>1<br/>
 * fn=n if n=0,1. <br/>


 * Reason: TODO ADD REASON(可选). <br/>
 * date: 2015-1-20 上午10:37:52 <br/>
 *
 * @author shenwf10476
 * @version
 * @since JDK 1.6
 */
public class Fibonacc {
	int singleFibonacc(int n){
		if (n ==0 || n==1){
			return n;
		}else{
			return singleFibonacc(n-1)+singleFibonacc(n-2);
		}
	}
	
	void arrayFibonacc(int[] array){
		int size = array.length;
		if (size>0){
			array[0] = 0;
		}
		if (size> 1){
			array[1] = 1;
		}
		if (size>2){
			for (int i=2;i<array.length;i++){
				array[i] = array[i-1]+array[i-2];
			}
		}
		
	}

	public static void main(String[] args) {
		for (int i=1;i<12;i++){
			if (i!=1){
				System.out.print(",");
			}
			System.out.print(new Fibonacc().singleFibonacc(i));
		}
		System.out.println();
		int[] array = new int[12];
		new Fibonacc().arrayFibonacc(array);
		for (int i=1;i<12;i++){
			if (i!=1){
				System.out.print(",");
			}
			System.out.print(array[i]);
		}
	}
}
